import axios from 'axios'

// axios的请求拦截
axios.interceptors.request.use(function(config) {
  console.log(config)
  //token
  //必须返回config，否则请求无法发送
  return config
})

// axios的响应拦截
axios.interceptors.response.use(function(res) {
  console.log(res)
  //必须返回config，否则返回值无法使用
  return res
})

//注册请求方法
let map = new Map()
map.set('delete', del)
map.set('get', get)
map.set('post', post)
map.set('put', put)

//请求方法的控制器

/**
 * 描述
 * @date 2021-03-06
 * @param {any} option:
 * {
 *    url: 'https://web17.oss-cn-hangzhou.aliyuncs.com/list.json',
      method: 'get',
      data: {}
 * }
 * @returns {any}
 */
async function request(option) {
  let mt = map.get(option.method)
  if (!mt) {
    //手动抛出异常，程序就会终止
    throw '你请求的方法不存在'
  }
  return await mt(option)
}

async function get(option) {
  return await axios.get(option.url, { params: option.data })
}

async function del(option) {
  return await axios.delete(option.url, { params: option.data })
}

async function post(option) {
  return await axios.post(option.url, option.data)
}

async function put(option) {
  return await axios.put(option.url, option.data)
}

export { request }
